#ifndef PERSONNAGE_H
#define PERSONNAGE_H
#include "Vision.h"
#include "Armes.h"
#include "Jambiere.h"
#include "Casque.h"
#include "Armure.h"
#include "Inventaire.h"

/*!
 * \file Level.h
 * \brief Personnage deplacement attaque def
 * \author Nicolas JAEGER
 * \version 0.1
 */

using namespace std;

class Personnage
{
   public:

        /*! \brief Constructeur
        * Constructeur de la classe Personnage
        */
        Personnage(int id);
        Personnage(int x,int y, char s,int id);
        Personnage(position a,char s,int id);
        virtual ~Personnage();

        /**
        * \fn void deplacer(int x, int y)
        *  \brief Deplace le personnage
        *
        * \param int x, int y position du personnage
        */
        void deplacer(int x, int y);

        /**
        * \fn void deplacer(position a)
        *  \brief Deplace le personnage
        *
        * \param position a
        */
        void deplacer(position a);

        /**
        * \fn void deplacer(int dir)
        *  \brief Deplace le personnage
        *
        * \param int dir
        */
        void deplacer(int dir);

        /**
        * \fn int getX()
        *  \brief Retourne la position du personnage en X
        *
        * \return Retourne un entier
        */
        int getX(); //Commentaire changement

        /**
        * \fn int getY()
        *  \brief Retourne la position du personnage en Y
        *
        * \return Retourne un entier
        */
        int getY();


        position getPos();

        /**
        * \fn int getVie()
        *  \brief Retourne la vie du personnage
        *
        * \return Renvoie un entier
        */
        int getVie();

        /**
        * \fn int getDefense()
        *  \brief Retourne la defense du personnage
        *
        * \return Renvoie un entier
        */
        int getDefense();

        /**
        * \fn int getDegats()
        *  \brief Retourne le nombre de degats du personnage
        *
        * \return Renvoie un entier
        */
        int getDegats();
		Armes* getArme();

        int getScore();
        int getId();

        /**
        * \fn int recevoirAttaque(int degats, int score)
        *  \brief Renvoie les degats reçus
        *
        * \param int degats, int score : degats de l'arme et truc aléatoire de la resistance
        * \return Renvoie un entier
        */
        string recevoirAttaque(int degats,int score);

        /**
        * \fn void changeArme(Armes nouvelleArme)
        *  \brief Change l'arme du personnage
        *
        * \param Armes nouvelleArme : nouvelle arme du personnage
        */
        void changerArme(Armes* nouvelleArme);

        /**
        * \fn void changerCasque(Casque nouveauCasque)
        *  \brief Change le casque du personnage
        *
        * \param Casque nouveauCasque : nouveau casque du personnage
        */
        void changerCasque(Casque* nouveauCasque);

        /**
        * \fn void changerArmure(Armure nouvelleArmure)
        *  \brief Change l'armure du personnage
        *
        * \param Armure nouvelleArmure : nouvelle armure du personnage
        */
        void changerArmure(Armure* nouvelleArmure);

        /**
        * \fn void changerJambiere(Jambiere nouvelleJambiere)
        *  \brief Change les jambières du personnage
        *
        * \param Jambiere nouvelleJambiere : nouvelles jambieres du personnage
        */
        void changerJambiere(Jambiere* nouvelleJambiere);


        void collisionMap();
        void collisionObj();
        void setLastPos(position a);
        void setLastPos(int x, int y);
        void gestionResistance();

        /**
        * \fn void draw()
        *  \brief Affiche le personnage par le symbole @ ou X si mort
        */
        void draw();
	Inventaire getInventaire();
   protected:
    const int id_;
	position pos_;
	int vie_;    // Vie du personnage
	int defense_ ;    // Defense de base
	int degats_;
	char sprite_; // Attaque de base
    position last_position;
    Armes* arme_; // Arme du personnage
    Casque* casque_;
	Inventaire inventaire_;
    Jambiere* jambiere_;
    Armure* armure_;
};
#endif // PERSONNAGE_H
